package jdkproxy;

import aspect.MyAspect;

import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

//JDK代理工厂
public class JdkProxyFactory {
    //通过该工厂，创建一个代理类（已经被代理好的类)，并返回代理类
    public static  Object getProxyObject(Object targetClass){
        //匿名内部类
        return Proxy.newProxyInstance(targetClass.getClass().getClassLoader(),
                targetClass.getClass().getInterfaces(),(Object proxy, Method method, Object[] args)->{
                    //前置增强
                    MyAspect myAspect = new MyAspect();
                    myAspect.beforeLog();
                    //目标方法
                    Object invoke = method.invoke(targetClass, args);
                    myAspect.afterLog();
                    return invoke;
                });
    }
}
